package service.interf.security;
                                     
import java.util.List;

import service.interf.IBaseDataService;
import dao.pojo.Group;

/**
 *  Title:IAuthority 鉴权接口
 *  Description:提供鉴权相关接口
 *  @author yangl
 *  @date 2012-11-30
 *  @version 1.0
 */
public interface IAuthority extends IBaseDataService{
	

	/**
	 * Title:delGroup
	 * Description:删除组
	 * @param groupId 传入组序号groupId
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String delGroup(Integer groupId) throws Exception; // 删除组

	/********** GROUP_AUTHORITY ************/
	
	/**
	 * Title:delGroupAuthority
	 * Description: 删除组权限
	 * @param groupId 组序号
	 * @param authorities 权限列表
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String delGroupAuthority(Integer groupId, String authorities)
			throws Exception; // 删除组权限

	/**
	 * Title:delGroupAllAuthority
	 * Description: 删除组所有权限
	 * @param groupId 组序号
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String delGroupAllAuthority(Integer groupId) throws Exception; // 删除组所有权限

	/**
	 * Title:updateGroupAuthority
	 * Description: 更新组权限
	 * @param groupId 组序号
	 * @param authorities 权限列表
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String updateGroupAuthority(Integer groupId, String authorities)
			throws Exception; // 更新组权限

	/**
	 * Title:updateAllGroupAuthority
	 * Description: 更新所有组权限
	 * @param groupAuthority 组权限 格式为{"group1":"auth1,auth2,auth3,...",...}
	 * @return 成功 1 失败0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String updateAllGroupAuthority(String groupAuthority)
			throws Exception; // 更新所有组权限

	/**
	 * Title:delAuthority
	 * Description: 删除权限
	 * @param model MAuthority对象
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String delAuthority(String ids) throws Exception; // 删除权限

	/************* GROUP_MEMBER *********************/
	/**
	 * Title:addUserToGroups
	 * Description: 添加用户到组
	 * @param uname 用户名
	 * @param groups 组名列表
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String addUserToGroups(Long userId, String groups)
			throws Exception; // 添加用户到组
	
	/**
	 * Title:addUserToGroup
	 * Description:添加用户到组
	 * @param userName 用户名
	 * @param groupName 组号
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String addUserToGroup(Long userId, String groupName) throws Exception;
	
	/**
	 * Title:addUsersToGroup
	 * Description:添加用户到组
	 * @param users 用户名列表
	 * @param groupId 组号
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String addUsersToGroup(String users, Integer groupId) 
		throws Exception;     //添加多用户到某组
	
	/**
	 * Title:removeUserFromGroups
	 * Description:从组删除用户
	 * @param uname 用户名
	 * @param groups 组名列表
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String removeUserFromGroups(Integer userId, String groups)
			throws Exception; // 从组删除用户
	
	/**
	 * Title:removeUsersFromGroup
	 * Description:从组删除用户
	 * @param uname 用户名 
	 * @param groups 组名列表
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String removeUsersFromGroup(String users, Integer groupId) 
		throws Exception; //从组删除用户

	/**
	 * Title:removeUserGroups
	 * Description:删除用户所有组
	 * @param uname 用户名
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String removeUserGroups(Integer userId) throws Exception; // 删除用户所有组

	/**
	 * Title:getUserGroups
	 * Description:获取用户组
	 * @param uname 用户名
	 * @return 成功   [{groupId,groupName},...]
	 * 			失败或没有 null
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String getUserGroups(Long userId) throws Exception; // 获取用户所有组
	
	/**
	 * Title:getUserGroups
	 * Description:获取用户组列表
	 * @uname：用户名
	 * @return group list
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public List<Group> getUserGroupList(Integer userId) throws Exception; //获取用户组 list
	
	/**
	 * Title:updateUserGroups
	 * Description:更新用户组
	 * @param uname 用户名 
	 * @param groups 组名列表
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String updateUserGroups(String userName, String groups)
			throws Exception; // 更新用户组
	
	/**
	 * Title:updateGroupUsers
	 * Description:更新组用户
	 * @param users 用户列表 
	 * @param groupId 组编号
	 * @return 成功 1 失败 0
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String updateGroupUsers(String users, Integer groupId) 
		throws Exception;     //更新组用户
	
	/**
	 * Title:getAllAuthorities
	 * Description:获取所有权限
	 * @return 成功 {rows:[]}权限json串 authority
	 * 失败 null
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String getAllAuthorities() throws Exception; // 获取所有权限

	/**
	 * Title:getAllGroups
	 * Description:获取所有组
	 * @return 成功 {rows:[{}]}权限json串 group
	 * 失败 null
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String getAllGroups() throws Exception; // 获取所有组

	/**
	 * Title:getAllGroupsWithAuthority
	 * Description:获取所有组并带权限
	 * @return 权限json串 [{groupName:[auth1,auth2,...]},......]
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String getAllGroupsWithAuthority() throws Exception; // 获取所有组并带权限

	/**
	 * Title:getGroupUsers
	 * Description:获取组用户
	 * @param groupId 组序号
	 * @return 用户json串 
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String getGroupUsers(Integer groupId) throws Exception; // 获取组用户
	
	/**
	 * Title:getGroupUsersDetail
	 * Description:获取组用户(带细节)
	 * @param groupId 组序号
	 * @param pageno 页面编号
	 * @param pagesize 页面所含记录的条数
	 * @return 用户json串 
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String getGroupUsersDetail(Integer groupId,int pageno,int pagesize) throws Exception; //获取组用户(带细节)
	
	/**
	 * Title:getAuthsByGroup
	 * Description:获取组权限
	 * @param groupId:组编号
	 * @return 组权限json串
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public String getAuthsByGroup(Integer groupId) throws Exception;  //获取组权限
	
	/**
	 * Title:getUserAuthorities
	 * Description:获取用户权限
	 * @param userName:用户名
	 * @return 成功：权限数组，失败：错误编号
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public List getUserAuthorities(Integer userId) throws Exception;  //获取用户权限
	
	/**
	 * Title:getAuthorityUsers
	 * Description:检查用户是否有权限
	 * @param userName:用户名
	 * @param auth:权限名
	 * @return 成功：true, 失败 false
	 * @exception 处理异常，抛出Exception交由上层异常处理层进行处理
	 */
	public boolean isUserHasAuthority(Integer userId,String auth) throws Exception;//检验用户是否有权限
	/**
	 * 根据用户id更新组
	 * @param userId
	 * @param ids
	 * @return
	 */
	public String updateUserGroups(Long userId, String ids) throws Exception;
	
}
